package mymyoux.utils
{	/**
	 * Maths est un ensemble de fonctions statiques étendant les fonctionnalités liées aux Mathématiques.
	 * @author Mymyoux
	 * @version 1.0
	 *
	 */
	public class Maths
	{
		/**
		 * @private
		 */
		protected static var id:Number=0;
		/**
		 * Renvoie le nombre de jours écoulés depuis la date passée en secondes.
		 * @param seconds La date en seconde.
		 * @return Le nombre de jours.
		 */
		static public function getDaySince(seconds:Number):int{
			return Math.floor((Math.floor((new Date()).getTime()/1000)-seconds)/(60*60*24));
		}
		/**
		 * Retourne le modulo de la valeur. Si la valeur est négative le modulo est quand même appliqué.
		 * @param value Valeur à moduler.
		 * @param modulo Le modulo.
		 * @return Le modulo de la valeur, tout résultat est compris entre [0,modulo-1] ou NaN si le modulo est nul.
		 * @example <listing version="3.0">
		 * mod(13,10)=3; 
		 * mod(-13,10)=7; 
		 * mod(-10,10)=0; 
		 * mod(4,0)=NaN;</listing>
		 */
		static public function mod(value:Number,modulo:uint):Number
		{
			if(value<0)
			{
				return (modulo-((-value)%modulo))%modulo;
			}
			return value%modulo;
		}
		/**
		 * Génère un entier aléatoirement compris entre min et max (bornes comprises)
		 * @param min Valeur minimum
		 * @param max Valeur maximum
		 * @return Un entier entre min et max compris.
		 */
		static public function randBetween(min:int,max:int):int{
			if(max<=min)
			{
				return min;
			}
			return Math.floor(Math.random()*(max-min+1)+min);
		}
		/**
		 * Arrondi le nombre en paramètre à un nombre de décimales près.
		 * @param valeur Nombre à arrondir.
		 * @param decimals Nombre de décimales après la virgule. 0 revient à utiliser <code>Math.round(valeur)</code>;
		 * @return Le nombre une fois arrondi.
		 */
		static public function round(valeur:Number,decimals:uint=0):Number
		{
			valeur*=Math.pow(10,decimals);
			valeur=Math.round(valeur);
			valeur/=Math.pow(10,decimals);
			return valeur;
		}
		/**
		 * Retourne un identifiant unique pour l'instance de l'application.
		 * @return Un identifiant unique pour la session en cours.
		 */
		 static public function get unique():Number
		 {
		 	return id++;
		 }

	}
}